﻿using System;
using System.Collections.Generic;
using ProyectoSelva.Const;
using ProyectoSelva.Daos;
using EntitiesAndMappings.Entities;
using System.Windows.Forms; 

namespace ProyectoSelva.Forms.Mantenimiento
{
    public partial class FrmMantenimientoEntidadGenericaHelper<T> : FrmMantenimientoEntidadGenerica where T : EntidadGenerica,new()
    {

     //   private FrmCrearEntidadGenerica<T> frmCrearEntidadGenerica;

        public static FrmMantenimientoEntidadGenericaHelper<T> Activo { set; get; }

        protected EntidadGenericaDAO<T> DAO;
         
        public FrmMantenimientoEntidadGenericaHelper()
        {
            if (Activo == null)
            {
                Activo = this;
            }
            Closed += EnCierre;
            Visible = false;
            DAO = new EntidadGenericaDAO<T>();
            dGridResultado.AutoGenerateColumns = false;

            ActualizarLista();
          }

        private IList<T> ActualizarLista()
        {
            IList<T> lista = DAO.ListarActivos();

            dGridResultado.DataSource = lista;

            if(lista != null)
            {
                return lista;
            }
            return new List<T>();
        }


        private void EnCierre(object sender, EventArgs e)
        {
            Activo = null;
        }

        protected override void tStripButtonCrear_Click(object sender, System.EventArgs e)
        {
           // frmCrearEntidadGenerica.ShowDialog(this);

            var form = new FrmCrearEntidadGenerica<T>(new T(), DAO);
            form.CadenaDescriptivaEntidad = this.CadenaDescriptivaEntidad;
            form.ShowDialog(this);
            ActualizarLista();
        }

        protected override void tStripButtonModificar_Click(object sender, System.EventArgs e)
        {
            // frmCrearEntidadGenerica.ShowDialog(this);
            if (dGridResultado.CurrentRow == null)
            {
                MessageBox.Show(@"Debe seleccionar un elemento");
            }
            else
            { 
            T entidadGenerica = (T)dGridResultado.CurrentRow.DataBoundItem;
            var form = new FrmCrearEntidadGenerica<T>(DAO.Refresh(entidadGenerica), DAO)
                           {
                               Text = @"Modificación de {0}",
                               CadenaDescriptivaEntidad = this.CadenaDescriptivaEntidad
                           };
            form.DeshabilitarEdicionDeCodigo();
            form.ShowDialog(this);
            ActualizarLista();
            }
        }


        protected override void tStripButtonEliminar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.CurrentRow == null)
            {
                return;
            }

            var entidadGenerica = (EntidadGenerica)dGridResultado.CurrentRow.DataBoundItem;
            entidadGenerica.Estado = Estado.Inactivo;
            DAO.Update(entidadGenerica as T);
            ActualizarLista();
        }

     


    }
}
